const axios = require("axios");
// seniverse
class Seniverse {
  /**
   * 初始化天气服务
   * @param {Object} options 配置项
   * @param {string} options.apiKey API密钥
   * @param {string} [options.baseUrl] 基础接口地址（可选）
   */
  constructor(options) {
    // 验证必要的API密钥
    if (!options.apiKey) {
      throw new Error("请提供有效的API Key");
    }

    this.apiKey = options.apiKey;
    // 默认使用心知天气API地址，可通过配置覆盖
    this.baseUrl = options.baseUrl || "https://api.seniverse.com/v3";
  }

  /**
   * 获取天气信息
   * @param {string} url 接口路径
   * @param {Object} query 查询参数
   * @returns {Promise<Object>} 天气数据
   */
  async get(url, query = {}) {
    // 处理URL路径，确保格式正确
    // 如果url不是以/开头，则添加/
    const formattedUrl = url.startsWith("/") ? url : `/${url}`;

    // 构建完整的请求URL
    const requestUrl = `${this.baseUrl}${formattedUrl}`;

    // 确保所有请求都包含apiKey参数
    const params = {
      key: this.apiKey,
      ...query
    };
    params.location = query.location ? query.location : "ip";

    // console.log(requestUrl, { params });
    return axios.get(requestUrl, { params }).then((res) => res.data.results[0]);
  }
}

const seniverse = new Seniverse({
  // apiKey: "SmdjbNZtgwK87AnpA"
  // apiKey: "SbZMpOYnm4Z5PGrrO"
  // apiKey : "SFZHK6fIBIMPAA1OH"
  // apiKey : "STr1aV_FFGoGnsfpe"
  // apiKey : "S9wf_hjTquPZxjwji"
  apiKey : "SQMbmNK1t7nrXQ-zN"
});

module.exports = { seniverse };
